#!/bin/bash

# Izvorno sa:
# http://www.boredworkers.com/2007/01/26/shell-script-nuggets-simulating-file-locks/

# Sinkronizacija rada s datotekom.
# $1 - Datoteka koju zaključavamo/odključavamo
# $2 - Akcija - zaključavanje (lock) ili otključavanje (unlock)
file_lock() {
	lockfile="${1}.tmp"
	action="$2"

	case "$action" in
	lock) # Check and apply a file lock if possible
		ln -s whatever $lockfile
		return $?
		;;
	unlock) # Remove the file lock
		rm -f $lockfile
		return $?
		;;
	esac

	# Return failure (for everything else)
	return 1
}

# Sinkronizacija rada s datotekom, uz čekanje oslobađanja datoteke.
# 3 pokušaja sa 0.5 sekundi pauze između pokušaja.
# $1 - Datoteka koju zaključavamo/odključavamo
wait_lock() {
	let COUNT=3
	while [ $COUNT -gt 0 ]; do
		file_lock $1 lock
		if [ $? -eq 0 ]; then
			return 0
		fi
		COUNT=$((COUNT - 1))
		sleep 0.5
	done
	
	# Datoteka nije zaključana!
	return 1
}

